﻿using PropertyChanged;
using System;
using System.ComponentModel;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Media;

namespace 节拍计算器2.平台实现
{
    public class Windows音效 : 音效
    {
        public string 音效文件路径 { get; set; }
        System.Media.SoundPlayer 播放器;
        public void 加载()
        {
            播放器 = new System.Media.SoundPlayer(音效文件路径);
            播放器.LoadAsync();
        }

        public void 播放()
        {
            播放器.Play();
        }

        public void 销毁()
        {
            播放器.Dispose();
        }
    }

    [AddINotifyPropertyChangedInterface]
    public class Windows音频 : 音频播放, INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        public void OnPropertyChanged(string propertyName)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }

        public static MediaPlayer Windows平台播放器 = new MediaPlayer();

        public TimeSpan 当前播放时间 { get; set; }

        public TimeSpan 总播放时间 { get; set; }

        public float 当前速度倍率 { get; set; }

        public string 当前播放文件路径 { get; set; }

        private bool 播放中 { get; set; }

        public void 停止()
        {
            Windows平台播放器.Dispatcher.Invoke(() =>
            {
                播放中 = false;
                Windows平台播放器.Stop();
                Windows平台播放器.Close();
                当前播放文件路径 = null;
            });
        }

        public void 定位(float 百分比)
        {
            Windows平台播放器.Position = TimeSpan.FromMilliseconds(总播放时间.TotalMilliseconds * 百分比);
        }


        public void 打开文件(string 文件路径)
        {
            停止();
       
            当前播放文件路径 = 文件路径;
            Windows平台播放器.Open(new Uri(文件路径));
        }

        public void 提升播放速度()
        {
            Windows平台播放器.SpeedRatio += 0.1;
            当前速度倍率 = (float)Windows平台播放器.SpeedRatio;
        }

        public void 播放()
        {
            Windows平台播放器.Play();
            播放中 = true;
            Task.Run(() =>
            {
                while (播放中)
                {
                 
                    Windows平台播放器.Dispatcher.Invoke(() => {
                        当前播放时间 = Windows平台播放器.Position;
                        if (Windows平台播放器.NaturalDuration.HasTimeSpan)
                        {
                            总播放时间 = Windows平台播放器.NaturalDuration.TimeSpan;
                        }
                        当前速度倍率 = (float)Windows平台播放器.SpeedRatio;

                    });
                    
                }
            });
            Windows平台播放器.MediaEnded += 播放到底端;
        }

        private void 播放到底端(object sender, EventArgs e)
        {
            Windows平台播放器.Position = TimeSpan.Zero;
            Windows平台播放器.Play();
        }

        public void 暂停()
        {
            Windows平台播放器.Pause();
            播放中 = false;
        }

        public void 重置()
        {
            Windows平台播放器.Stop();
            Windows平台播放器.Play();
        }

        public void 降低播放速度()
        {
            Windows平台播放器.SpeedRatio -= 0.1;
            当前速度倍率 = (float)Windows平台播放器.SpeedRatio;
        }
    }
}
